Méthode merise

SQL

LMD
Sélections de données
Projection
Restrictions
Tri et regroupements
Jointures
Sous-requêtes
Opération Asemblistes
Modification Tuples
LDD
Création de table
Contraintes d'intégrité
Création d'un index
Création de vues
Modification de table

Exercice d'appication

 

 

 

 

Tri et Regroupements

 

Tri des résultats

Il est possible en SQL d'organiser les résultats grâce à la clause ORDER BY. La clause ORDER BY est suivie des mots clés ASC ou DESC, qui précisent respectivement si le tri se fait de manière croissante (par défaut) ou décroissante. Le classement se fait sur des nombres ou des chaines de caractères.
Prenons l'exemple de la table voiture :

Marque Modele Serie Numero Compteur
Renault 18 RL 4698 SJ 45 123450
Renault Kangoo RL 4568 HD 16 56000
Renault Kangoo RL 6576 VE 38 12000
Peugeot 106 KID 7845 ZS 83 75600
Peugeot 309 chorus 7647 ABY 82 189500
Ford Escort Match 8562 EV 23  

 

La sélection de toutes les colonnes de la table trièes par ordre croissant de l'attribut Marque se fait par l'instruction :

SELECT * FROM VOITURE ORDER BY Marque ASC

Marque Modele Serie Numero Compteur
Ford Escort Match 8562 EV 23  
Peugeot 106 KID 7845 ZS 83 75600
Peugeot 309 chorus 7647 ABY 82 189500
Renault 18 RL 4698 SJ 45 123450
Renault Kangoo RL 4568 HD 16 56000
Renault Kangoo RL 6576 VE 38 12000

 

La sélection de toutes les colonnes de la table trièes par ordre croissant de l'attribut Marque, puis par ordre décroissant du compteur, se fait par l'instruction :

SELECT * FROM VOITURE ORDER BY Marque ASC, Compteur DESC

Marque Modele Serie Numero Compteur
Ford Escort Match 8562 EV 23  
Peugeot 309 chorus 7647 ABY 82 189500
Peugeot 106 KID 7845 ZS 83 75600
Renault 18 RL 4698 SJ 45 123450
Renault Kangoo RL 4568 HD 16 56000
Renault Kangoo RL 6576 VE 38 12000

 

Regroupement de résultats

Il peut être intéressant de regrouper des résultats afin de faire des opérations par groupe (opérations statistiques par exemple). Cette opération se réalise à l'aide de la clause GROUP BY, suivie du nom de chaque colonne sur laquelle on veut effectuer des regroupements.

Les principales fonctions pouvant être effectuées par groupe sont 

  • AVG: Calcule la moyenne d'une colonne (ou de chaque regroupement si elle est couplée à la clause GROUP BY)
  • COUNT: Calcule le nombre de lignes d'une table (ou de chaque regroupement ...)
  • MAX: Calcule la valeur maximale d'une colonne (ou de chaque regroupement ...)
  • MIN: Calcule la valeur minimale colonne (ou de chaque regroupement ...)
  • SUM: Effectue la somme des valeurs d'une colonne (ou de chaque regroupement ...)

Soit la table VOITURE ci-dessus :

L'affichage des moyennes des compteurs par marque se fait par l'instruction :

SELECT Marque, AVG(Compteur) AS Moyenne FROM VOITURE GROUP BY Marque

Marque Moyenne
Renault 63816.6
Peugeot 132550
Ford  

 

La clause HAVING va de pair avec la clause GROUP BY, elle permet d'appliquer une restriction sur les groupes créés grâce à la clause GROUP BY.

L'affichage des moyennes des compteurs non nulles regroupées par marque se fait par l'instruction :

SELECT Marque, AVG(Compteur) AS Moyenne FROM VOITURE GROUP BY Marque HAVING Moyenne IS NOT NULL

Marque Moyenne
Renault 63816.6
Peugeot 132550

 

La sélection des colonnes Marque et Compteur des voitures ayant un kilométrage inférieur à 100 000 Km se fait par l'instruction :

SELECT Marque,Compteur FROM OCCAZ WHERE (Compteur < 100000)

Marque Compteur
Renault 56000
Renault 12000
Peugeot 75600

 

La sélection de toutes les voitures d'occasion ayant un kilométrage inférieur ou égal à 100 000 Km, et supérieur ou égal à 30000Km, se fait par l'instruction :

SELECT * FROM OCCAZ WHERE (Compteur <= 100000) AND (Compteur >= 30000)

Marque Modele Serie Numero Compteur
Renault Kangoo RL 4568 HD 16 56000
Peugeot 106 KID 7845 ZS 83 75600

 

Restriction sur une comparaison de chaîne

Le prédicat LIKE permet de faire des comparaisons sur des chaines grâce à des caractères, appelés caractères jokers :

  • Le caractère % permet de remplacer une séquence de caractères (éventuellement nulle)
  • La caractère _ permet de remplacer un caractère (l'équivalent du "blanc" au scrabble...)
  • Les caractères [-] permettent de définir un intervalle de caractères (par exemple [J-M])

La sélection des voitures dont la marque a un E en deuxième position se fait par l'instruction :

SELECT * FROM OCCAZ WHERE Marque LIKE "_E%"

Marque Modele Serie Numero Compteur
Renault 18 RL 4698 SJ 45 123450
Renault Kangoo RL 4568 HD 16 56000
Renault Kangoo RL 6576 VE 38 12000
Peugeot 106 KID 7845 ZS 83 75600
Peugeot 309 chorus 7647 ABY 82 189500

 

Suivant l'environnement ou vous utilisez ce prédicat, il sera peut-être nécessaire d'"échapper" les guillemets avec un caractère d'échappement (généralement la barre oblique inverse "\").

 

Restriction sur un ensemble

Les prédicats BETWEEN et IN permettent de vérifier respectivement qu'une valeur se trouve dans un intervalle ou qu'une valeur appartient à une liste de valeurs :

La sélection de toutes les voitures d'occasion ayant un kilométrage inférieur ou égal à 100 000 Km, mais supérieur ou égal à 30000 Km, (effectuée plus haut avec des comparateurs arithmétiques) peut se faire par l'instruction :

SELECT * FROM OCCAZ WHERE Compteur BETWEEN 100000 AND 30000

Marque Modele Serie Numero Compteur
Renault Kangoo RL 4568 HD 16 56000
Peugeot 106 KID 7845 ZS 83 75600

 

La sélection des voitures d'occasion dont la marque est Peugeot ou Ford se fait grâce à l'instruction :

SELECT * FROM OCCAZ WHERE Marque IN ("Peugeot", "Ford")

Marque Modele Serie Numero Compteur
Peugeot 106 KID 7845 ZS 83 75600
Peugeot 309 chorus 7647 ABY 82 189500
Ford Escort Match 8562 EV 23  

 

Restriction sur les valeurs manquantes

Lorsqu'un champ n'est pas renseigné, le SGBD lui attribue une valeur spéciale que l'on note NULL. La recherche de cette valeur nefffff peut pas se faire à l'aide des opérateurs standards, il faut utiliser les prédicats IS NULL ou bien IS NOT NULL.

La sélection de toutes les voitures d'occasion dont le kilométrage n'est pas renseigné se fait par l'instruction :

SELECT * FROM OCCAZ WHERE Compteur IS NULL

Marque Modele Serie Numero Compteur
Ford Escort Match 8562 EV 23  

 

Remarquez l'utilisation de AS pour donner un nom à la colonne créée à l'aide de la fonction AVG

 

Ce document intitulé « SQL - Commande SELECT » issu de Comment Ça Marche (www.commentcamarche.net) est mis à disposition sous les termes de la licence Creative Commons. Vous pouvez copier, modifier des copies de cette page, dans les conditions fixées par la licence, tant que cette note apparaît clairement.

 

 
Graphisme : Stéphane SAWICKI
© Christophe ROVAI 2009 - Mise à jour : octobre 2009